package com.lrj.datastructure.calendar;

//自己研究的万年历算法
public class MyCalendar extends Calendar{

    protected int getWeek() {
        //从1900年开始，每400年后的1月1日与1900年1月1日的星期是对应的
        //例如，1900年的1月1日是星期一，那2300年1月1日也是星期一
        //判断输入的year是1900年前的还是1900年后的，二者的算法是不一样的
        int y = this.year;
        int m = this.month;
        int sum = 0;
        int week = 0;

        if (year >= 1900) {
            y = (y - 1900) % 400;
            for (int i = 0; i < y; i ++) {
                if (isLyeap(1900 + i)) {
                    sum += 366;
                } else {
                    sum += 365;
                }
            }

            for (int i = 0; i < m - 1; i ++) {
                sum += getMonthDays(i + 1, year);
            }

            week = (1 + sum % 7);

        } else {
            y = (1900 - y - 1) % 400;
            for (int i = 0; i < y; i ++) {
                if (isLyeap(year + 1 + i)) {
                    sum += 366;
                } else {
                    sum += 365;
                }
            }

            for (int i = m; i <= 12; i ++) {
                sum += getMonthDays(i, year);
            }

            week = (1 - sum % 7 + 7) % 7;
        }

        return week;
    }
}
